
(function(){ 
    // 按下自定义按钮时执行的代码 
    var name='formathtml', fun = {
        commands: {
            formathtml: {
                exec: function (editor) {
                    formatText(editor);
                }
            }
        }
    }; 
    CKEDITOR.plugins.add(name,{ 
        init:function(editor){ 
            editor.addCommand( name, fun.commands.formathtml);
            editor.ui.addButton(name,{ 
                label:'格式化html', 
                icon: this.path + 'timg.jpg', 
                command:name 
            }); 
        } 
    }); 
    
    function formatText(editor) {
        var myeditor = editor;
        if (myeditor.mode == "wysiwyg") {
            var tempimg = new Array();
            var temptable = new Array();
            var tempobject = new Array();

            var isPart = false; //暂时无法实现局部格式化
            if (!isPart) {
                var tmpDiv = document.createElement("DIV");
                var editorhtml = myeditor.getData();
                editorhtml = editorhtml.replace(/<p style="\w?">\s*<span style="display: none;?">&nbsp;<\/span>\s*<\/div>/gi, '<p>[page]</p>');  //将div span标签替换为p 标签

                
                var reg = /<!--\[if\s+gte\s+mso\s+9\]>(?:(?!<!\[endif\]-->)[\s\S])*<!\[endif\]-->/gi;
                var reg1 = /<!--\[if\s+gte\s+mso\s+10\]>(?:(?!<!\[endif\]-->)[\s\S])*<!\[endif\]-->/gi;
                var reg2 = /<style[\s\S]*?<\/style>/gi;
                var reg3 = /(<!--.*?-->)|(<(meta|link).*?>)/gi;
                var reg4 = /&nbsp;/gi;
                var reg5 = /<span lang="EN-US"><o:p><\/o:p><\/span>/gi;
                var reg6 = /<img src="data:image[\s\S]*?\s+\/>/gi;
                editorhtml = editorhtml.replace(reg, '').replace(reg1, '').replace(reg2, '').replace(reg3, '').replace(reg4, '').replace(reg5, '').replace(reg6, '');
                

                editor.setData(editorhtml);
                // tmpDiv.innerHTML = editorhtml.replace(/&nbsp;/gi, '').replace(/<div/gi, '<p').replace(/<\/div/gi, '</p');     //移除空格标签，div替换为p标签。
                // if (window.navigator.userAgent.toLowerCase().indexOf("msie") > 0) {
                //     tmpDiv.innerHTML = tmpDiv.innerHTML.replace(/<\/p>/gi, '<br /><\/p>');      //每个段落相隔一行
                // }
                // var tables = tmpDiv.getElementsByTagName("TABLE");
                // if (tables != null && tables.length > 0) {
                //     for (var j = 0; j < tables.length; j++) {
                //         temptable[temptable.length] = tables[j].outerHTML;
                //     }
                //     var formattableCount = 0;
                //     for (var j = 0; j < tables.length;) {
                //         tables[j].outerHTML = "#FormatTableID_" + formattableCount + "#";
                //         formattableCount++;
                //     }
                // }

                // var objects = tmpDiv.getElementsByTagName("OBJECT");
                // if (objects != null && objects.length > 0) {
                //     for (var j = 0; j < objects.length; j++) {
                //         tempobject[tempobject.length] = objects[j].outerHTML;
                //     }
                //     var formatobjectCount = 0;
                //     for (var j = 0; j < objects.length;) {
                //         objects[j].outerHTML = "#FormatObjectID_" + formatobjectCount + "#";
                //         formatobjectCount++;
                //     }
                // }

                // var imgs = tmpDiv.getElementsByTagName("IMG");
                // if (imgs != null && imgs.length > 0) {
                //     for (var j = 0; j < imgs.length; j++) {
                //         var t = document.createElement("IMG");
                //         t.alt = imgs[j].alt;
                //         t.src = imgs[j].src;
                //         t.width = imgs[j].width;
                //         t.height = imgs[j].height;
                //         t.align = imgs[j].align;
                //         tempimg[tempimg.length] = t;
                //     }
                //     var formatImgCount = 0;
                //     for (var j = 0; j < imgs.length;) {
                //         imgs[j].outerHTML = "#FormatImgID_" + formatImgCount + "#";
                //         formatImgCount++;
                //     }
                // }

                // var strongarray = new Array();
                // var strongcount = 0;
                // for (var i = 0; i < tmpDiv.getElementsByTagName('b').length; i++) {
                //     strongarray[strongcount] = tmpDiv.getElementsByTagName('b')[i].innerText.trim();
                //     tmpDiv.getElementsByTagName('b')[i].innerHTML = "#FormatStrongID_" + strongcount + "#";
                //     strongcount++;
                // }

                // for (var i = 0; i < tmpDiv.getElementsByTagName('strong').length; i++) {
                //     strongarray[strongcount] = tmpDiv.getElementsByTagName('strong')[i].innerText.trim();
                //     tmpDiv.getElementsByTagName('strong')[i].innerHTML = "#FormatStrongID_" + strongcount + "#";
                //     strongcount++;
                // }
                // var html = processFormatText(tmpDiv.innerText);
                // html = html.replace(/<p>\[page\]<\/p>/gi, '<div style="page-break-after: always;"><span style="display: none;">&nbsp;</span></div>');   //p标签替换回原来的div和span标签。
                // if (temptable != null && temptable.length > 0) {
                //     for (var j = 0; j < temptable.length; j++) {
                //         var tablehtml = temptable[j];
                //         html = html.replace("#FormatTableID_" + j + "#", tablehtml);
                //     }
                // }

                // if (tempobject != null && tempobject.length > 0) {
                //     for (var j = 0; j < tempobject.length; j++) {
                //         var objecthtml = "<p align=\"center\">" + tempobject[j] + "</p>";
                //         html = html.replace("#FormatObjectID_" + j + "#", objecthtml);
                //     }
                // }

                // if (tempimg != null && tempimg.length > 0) {
                //     for (var j = 0; j < tempimg.length; j++) {
                //         var imgheight = "";
                //         var imgwidth = "";
                //         if (tempimg[j].height != 0)
                //             imgheight = " height=\"" + tempimg[j].height + "\"";
                //         if (tempimg[j].width != 0)
                //             imgwidth = " width=\"" + tempimg[j].width + "\"";
                //         var imgalign = "";
                //         if (tempimg[j].align != "")
                //             imgalign = " align=\"" + tempimg[j].align + "\"";
                //         var imghtml = "<p align=\"center\"><img src=\"" + tempimg[j].src + "\" alt=\"" + tempimg[j].alt + "\"" + imgwidth + " " + imgheight + " align=\"" + tempimg[j].align + "\" border=\"0\"></p>";
                //         html = html.replace("#FormatImgID_" + j + "#", imghtml);
                //     }
                // }

                // for (var i = 0; i < strongcount; i++) {
                //     html = html.replace("#FormatStrongID_" + i + "#", "<p><strong>" + strongarray[i] + "</strong></p>");
                // }

                // while (html.indexOf("</p></p>") != -1) html = html.replace("</p></p>", "</p>");
                // while (html.indexOf('<p><p align="center">') != -1) html = html.replace('<p><p align="center">', '<p align="center">');
                // editor.setData(html);

            } else {

            }
        } else {
            alert('必须在设计模式下操作！');
        }
    }
    function processFormatText(textContext) {
        var text = dbc2Sbc(textContext);
        var prefix = "";
        var tmps = text.split("\n");
        var html = "";
        for (var i = 0; i < tmps.length; i++) {
            var tmp = tmps[i].trim();
            if (tmp.length > 0) {
                var reg = /#Format[A-Za-z]+_\d+#/gi;
                var f = reg.exec(tmp);
                if (f != null) {
                    tmp = tmp.replace(/#Format[A-Za-z]+_\d+#/gi, '');
                    html += f;
                    if (tmp != "")
                        html += "<p align=\"center\">" + tmp + "</p>\n";
                } else {
                    html += "<p style='text-indent:2em;'>" + tmp + "</p>\n";
                }
            }
        }
        return html;
    }
    function dbc2Sbc(str) {
        var result = '';
        for (var i = 0; i < str.length; i++) {
            var code = str.charCodeAt(i);
            // “65281”是“！”，“65373”是“｝”，“65292”是“，”。不转换"，"

            if (code >= 65281 && code < 65373 && code != 65292 && code != 65306) {
                //  “65248”是转换码距
                result += String.fromCharCode(str.charCodeAt(i) - 65248);
            } else {
               result += str.charAt(i);
            }
        }
        return result;
    }
    String.prototype.trim = function () {
        return this.replace(/(^[\s　]*)|([\s　]*$)/g, "");
    };

    String.prototype.leftTrim = function () {
        return this.replace(/(^\s*)/g, "");
    };

    String.prototype.rightTrim = function () {
        return this.replace(/(\s*$)/g, "");
    };
})(); 
